//============================================================================================
/**
 * @file	acce_game.c
 * @brief	アクセサリーくじ引き
 *
 * @author	saito GAME FREAK inc.
 *
 * モジュール名：AcceGame_
 */
//============================================================================================

#include "common.h"
#include "acce_game.h"
#include "savedata/imageclip_data.h"
#include "assert.h"

#define ACCE_GAME_ACCE_NUM	(39)
#define ACCE_GAME_BG_NUM	(14)	//総数はIMC_BG_RIGHT_MAX＝18だけど、くじ引きでもらえるのは14まで

//アクセサリーテーブル
static const u8 AcceTbl[ACCE_GAME_ACCE_NUM] =
{
	47,
	56,
	57,
	58,
	59,
	60,
	61,
	62,
	63,
	64,
	65,
	66,
	67,
	68,
	69,
	70,
	71,
	72,
	73,
	74,
	75,
	76,
	77,
	78,
	79,
	80,
	81,
	82,
	83,
	84,
	85,
	86,
	87,
	88,
	89,
	90,
	91,
	95,
	96,
};

//--------------------------------------------------------------------------------------------
/**
 * アクセサリーくじ引きゲーム：ゲームで手に入るアクセサリーをコンプしてるか？
 *
 * @param	sv
 *
 * @return	BOOL		TRUEでコンプリート
 */
//--------------------------------------------------------------------------------------------
BOOL AcceGame_ChkComp(SAVEDATA * sv)
{
	u8 i;
	IMC_SAVEDATA* imc;
    IMC_ITEM_SAVEDATA* imc_item;

	imc	= SaveData_GetImcSaveData( sv );
	imc_item = ImcSaveData_GetItemSaveData( imc );	//アイテムセーブデータ取得

	for (i=0;i<ACCE_GAME_ACCE_NUM;i++){
		u8 acce_no;
		acce_no = AcceTbl[i];
		if ( ImcSaveData_CheckAcceAdd( imc_item, acce_no, 1 ) == TRUE ){
			//追加できるので、まだコンプリートしてない
			return FALSE;
		}
	}
	return TRUE;	//アクセサリーコンプリート
}

//--------------------------------------------------------------------------------------------
/**
 * アクセサリーくじ引きゲーム：取得するアクセサリーナンバー
 *
 * @param	none
 *
 * @return	acce_no		アクセサリーナンバー
 */
//--------------------------------------------------------------------------------------------
u8 AcceGame_GetAcceNo(void)
{
	u8 acce_no;
	u8 idx;
	//ランダムで１個選ぶ
	idx = gf_rand()%ACCE_GAME_ACCE_NUM;
	acce_no = AcceTbl[idx];
	return acce_no;
}

//--------------------------------------------------------------------------------------------
/**
 * アクセサリーくじ引きゲーム：イメージクリップ壁紙コンプリートチェック
 *
 * @param	sv
 *
 * @return	BOOL		TRUEでコンプリート
 */
//--------------------------------------------------------------------------------------------
BOOL AcceGame_ChkImcBgComp(SAVEDATA * sv)
{
	u8 i;
	IMC_SAVEDATA* imc;
    IMC_ITEM_SAVEDATA* imc_item;

	imc	= SaveData_GetImcSaveData( sv );
	imc_item = ImcSaveData_GetItemSaveData( imc );	//アイテムセーブデータ取得

	for (i=0;i<ACCE_GAME_BG_NUM;i++){
		if ( !ImcSaveData_CheckBgGet( imc_item, i ) ){
			//持っていないので、コンプリートしてない
			return FALSE;
		}
	}
	return TRUE;		//イメージクリップ壁紙コンプリート
}

//--------------------------------------------------------------------------------------------
/**
 * アクセサリーくじ引きゲーム：まだ持っていないイメージクリップ壁紙ナンバーをランダムで返す
 *
 * @param	sv
 *
 * @return	bg_no		イメージクリップ壁紙ナンバー
 */
//--------------------------------------------------------------------------------------------
u8 AcceGame_GetImcBgNoRnd(SAVEDATA * sv)
{
	u8 i;
	u8 bg_list[ACCE_GAME_BG_NUM];	//持ってないBGリスト
	u8 bg_num;						//持ってないBG数
	u8 bg_no;
	IMC_SAVEDATA* imc;
    IMC_ITEM_SAVEDATA* imc_item;

	//リストクリア
	bg_num = 0;
	for (i=0;i<ACCE_GAME_BG_NUM;i++){
		bg_list[i] = 0;
	}

	imc	= SaveData_GetImcSaveData( sv );
	imc_item = ImcSaveData_GetItemSaveData( imc );	//アイテムセーブデータ取得

	for (i=0;i<ACCE_GAME_BG_NUM;i++){
		if ( !ImcSaveData_CheckBgGet( imc_item, i ) ){
			//持っていないので、リストに追加
			bg_list[bg_num] = i;
			bg_num++;
		}
	}

	if (bg_num == 0){
		GF_ASSERT_MSG(0,"IMC_BG_NUM_ERROR\n");
		return 0;
	}

	//持ってないBGリストからランダム取得
	{
		u8 idx;
		idx = gf_rand()%bg_num;
		bg_no = bg_list[idx];
	}
	return bg_no;
}
